import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeView, QVBoxLayout, QWidget, QLabel, QPushButton
from PyQt5.QtGui import QStandardItemModel, QStandardItem

class ExampleApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("QTreeView 获取当前选中节点示例")
        self.setGeometry(100, 100, 400, 300)

        # 创建 QTreeView 控件
        self.treeView = QTreeView(self)
        self.treeView.setHeaderHidden(True)  # 隐藏表头

        # 创建模型
        self.model = QStandardItemModel()
        self.model.setHorizontalHeaderLabels(["名称"])

        # 构建树形结构
        self.buildTree(self.model.invisibleRootItem())

        # 设置模型
        self.treeView.setModel(self.model)

        # 创建一个标签用于显示当前节点及其父节点信息
        self.label = QLabel("请选择一个节点以查看信息", self)

        # 创建一个按钮,点击后获取当前选中的节点
        self.button = QPushButton("获取当前选中节点", self)
        self.button.clicked.connect(self.getCurrentNode)

        # 布局
        layout = QVBoxLayout()
        layout.addWidget(self.treeView)
        layout.addWidget(self.label)
        layout.addWidget(self.button)

        # 创建一个中心窗口
        centralWidget = QWidget(self)
        centralWidget.setLayout(layout)
        self.setCentralWidget(centralWidget)

    def buildTree(self, parentItem):
        # 构建示例树形结构
        item1 = QStandardItem("节点 1")
        item2 = QStandardItem("节点 2")
        item3 = QStandardItem("节点 3")
        parentItem.appendRow(item1)
        parentItem.appendRow(item2)
        parentItem.appendRow(item3)

        subItem1 = QStandardItem("子节点 1")
        subItem2 = QStandardItem("子节点 2")
        item1.appendRow(subItem1)
        item1.appendRow(subItem2)

    def getCurrentNode(self):
        # 获取当前选中的节点索引
        currentIndex = self.treeView.currentIndex()
        if currentIndex.isValid():
            # 获取当前选中的节点
            currentItem = self.model.itemFromIndex(currentIndex)
            # 获取父节点
            parentItem = currentItem.parent()
            if parentItem:
                self.label.setText(f"当前节点:{currentItem.text()},父节点:{parentItem.text()}")
            else:
                self.label.setText(f"当前节点:{currentItem.text()},没有父节点(根节点)")
        else:
            self.label.setText("未选择任何节点")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = ExampleApp()
    ex.show()
    sys.exit(app.exec_())